Add new 'arglist' stuff so that file formats with options can be seen
authorrobertl <robertl@f51c46e8-681c-474f-0cfe-069cfd0219fb>
Fri, 7 Feb 2003 07:24:23 +0000 (07:24 +0000)
committerrobertl <robertl@f51c46e8-681c-474f-0cfe-069cfd0219fb>
Fri, 7 Feb 2003 07:24:23 +0000 (07:24 +0000)
in the help message.

gpsbabel/defs.h
gpsbabel/magproto.c
gpsbabel/vecs.c

index 201257a4c1a4bd18d95be4cf2f0909781c0c00e4..69f9ec7a129941c9b121fceba0e3f290f98e7a71 100644 (file)
@@ -202,6 +202,12 @@ void setshort_mustupper(void *, int n);
 void setshort_mustuniq(void *, int n);
 void setshort_whitespace_ok(void *, int n);
 
+typedef struct arglist {
+       char *argstring;
+       char **argval;
+       char *helpstring;
+} arglist_t;
+
 typedef struct ff_vecs {
        ff_init rd_init;
        ff_init wr_init;
@@ -209,6 +215,7 @@ typedef struct ff_vecs {
        ff_deinit wr_deinit;
        ff_read read;
        ff_write write;
+       arglist_t *args;
 } ff_vecs_t;
 
 void waypt_init(void);
index efe0f9bdf615ea387cf05909b4db746714761246..4fae3957fa395d50f447340caf29cb71560ad2d2 100644 (file)
@@ -40,6 +40,9 @@ static double mag2degrees(double mag_val);
 static void mag_readmsg(void);
 static void *mkshort_handle;
 static char *deficon;
+static char *bs;
+static char *noack;
+
 
 typedef enum {
        mrs_handoff = 0,
@@ -661,14 +664,18 @@ termwrite(char *obuf, int size)
 }
 #endif
 
+static
+arglist_t mag_args[] = {
+       {"baud", &bs, "Numeric value of bitrate (baud=4800)"},
+       {"noack", &noack, "Suppress use of handshaking in name of speed"},
+       {"deficon", &deficon, "Default icon name"},
+       {0, 0, 0}
+};
 
 static void
 mag_rd_init(const char *portname, const char *args)
 {
        time_t now, later;
-       char * bs = get_option(args, "baud");
-       char * noack = get_option(args, "noack");
-       deficon = get_option(args, "deficon");
 
        if (bs) {
                bitrate=atoi(bs);
@@ -721,7 +728,6 @@ mag_wr_init(const char *portname, const char *args)
        }
 #else
        struct stat sbuf;
-       deficon = get_option(args, "deficon");
        magfile_out = fopen(portname, "w+b");
        fstat(fileno(magfile_out), &sbuf);
        is_file = S_ISREG(sbuf.st_mode);
@@ -1145,4 +1151,5 @@ ff_vecs_t mag_vecs = {
        mag_deinit,     
        mag_read,
        mag_write,
+       mag_args
 };
index f7dfb6bd6922e4d35862bc5a8d603ddef17e4250..14a541f77bd27379abe2058438022e5102820030 100644 (file)
@@ -230,16 +230,30 @@ find_vec(char *const vecname, char **opts)
        char *svecname = strtok(v, ",");
 
        while (vec->vec) {
-               if (strcmp(svecname, vec->name) == 0) {
-                       char * res = strchr(vecname, ',');
-                       if (res)
-                               *opts = strchr(vecname, ',')+1;
-                       else
-                               *opts = NULL;
-                       free(v);
-                       return vec->vec;
+               arglist_t *ap;
+               char *res;
+
+               if (strcmp(svecname, vec->name)) {
+                       vec++;
+                       continue;
+               }
+
+               res = strchr(vecname, ',');
+               if (res) {
+                       *opts = strchr(vecname, ',')+1;
+
+                       if (vec->vec->args) {
+                               for (ap = vec->vec->args; ap->argstring; ap++){
+                                       *ap->argval = get_option(*opts, ap->argstring);
+                               }
+                       }
+               } else {
+                       *opts = NULL;
                }
-               vec++;
+
+               free(v);
+               return vec->vec;
+               
        }
        free(v);
        return NULL;
@@ -295,9 +309,15 @@ void
 disp_vecs(void)
 {
        vecs_t *vec;
+       arglist_t *ap;
+
        for (vec = vec_list; vec->vec; vec++) {
                printf("        %-20.20s  %-50.50s\n",
                        vec->name, vec->desc);
+               for (ap = vec->vec->args; ap && ap->argstring; ap++) {
+               printf("          %-10.10s            %-40.40s\n",
+                       ap->argstring, ap->helpstring);
+               }
        }
 }